The present invention generally relates to a storage system.
Generally speaking, a storage system, in which technology called RAID (Redundant Arrays of Independent (or Inexpensive) Disks) is employed, comprises a RAID group configured from a plurality of storage devices. A RAID group storage area is configured from a plurality of rows of sub-storage areas. The respective rows of sub-storage areas extend across the plurality of storage devices configuring the RAID group, and are configured from a plurality of storage areas corresponding to the plurality of storage devices. Hereinafter, one sub-storage area will be called a “stripe,” and one row configured from a plurality of stripes will be called a “row of stripes”. The RAID group storage area is made up of consecutive rows of stripes.
A RAID is known to have a number of levels (referred to as “RAID levels” hereinafter).
For example, there is RAID 5. In RAID 5, data is distributively written to a plurality of storage devices (for example, hard disk drives (HDD)), which configure the RAID group corresponding to RAID 5. More specifically, for example, write-targeted data specified by a host computer corresponding to RAID 5 is divided into data of a prescribed size (hereinafter, for the sake of convenience, referred to as a “data unit”), each data unit is divided into a plurality of data elements, and the plurality of data elements is written to a plurality of stripes. Further, in RAID 5, in order to restore a data element that can no longer be read out from a storage device due to this storage device having failed, redundancy data called “parity” (hereinafter, “redundancy code”) is created for a single data unit, and this redundancy code is also written to a stripe. More specifically, for example, when there are four storage devices configuring a RAID group, three data elements, which configure a data unit, are written to three stripes corresponding to three storage devices from thereamong, and a redundancy code is written to the stripe corresponding to the one remaining storage device. If a failure should occur in one of the four storage devices configuring the RAID group, the unreadable data element is restored by using the remaining two data elements configuring the data unit, which comprises this unreadable data element, and the redundancy code corresponding to this data unit.
The problem with RAID 5 is that it is unable to tolerate a so-called double-failure. More specifically, when two elements (either two data elements, or one data element and a redundancy code) in a data set, which is configured by a data unit and a redundancy code, become unreadable due to the fact that two of the plurality of storage devices configuring the RAID group have failed, these two elements cannot be restored. This is because only one redundancy code is created for each data unit.
RAID 6 is the RAID level that is capable of tolerating a double-failure like this. In RAID 6, two (two types of) redundancy codes are created for each row of stripes (Intelligent RAID 6). Theory Overview and Implementation.
However, while RAID 6 has the advantage of being able to tolerate a double-failure, it has the disadvantage of requiring more storage capacity than RAID 5 for a single data unit. This is because more redundancy codes are written for a single data unit than in RAID 5.